package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @Author: zm
 * @Date: 2021/8/24 20:35
 */
public interface OrderInfoService extends IService<OrderInfo> {
    // 保存订单信息
    Long submitOrder(OrderInfo orderInfo);

    /**
     * @param userId
     * @return
     */
    String createTradeNo(String userId);

    /**
     * 比较流水号
     *
     * @param tradeNo
     * @param userId
     * @return
     */
    boolean checkTradeNo(String tradeNo, String userId);

    /**
     * 删除流水号
     *
     * @param userId
     */
    void deleteTradeNo(String userId);

    /**
     * 验证库存
     *
     * @param skuId
     * @param skuNum
     * @return
     */
    boolean checkStock(Long skuId, Integer skuNum);

    /**
     * 关闭订单 根据订单id
     *
     * @param orderInfoId
     * @param s
     */
    void execExpiredOrder(Long orderInfoId, String flag);

    /**
     * 根据订单id 修改订单状态
     *
     * @param orderInfoId
     * @param processStatus
     */
    void updateOrderStatus(Long orderInfoId, ProcessStatus processStatus);

    /**
     * 获取 orderInfo 对象
     * @param orderInfoId
     * @return
     */
    OrderInfo getOrderInfo(Long orderInfoId);

    // 给库存系统发状态信息
    void sendOrderStatus(Long orderId);

    // 将 orderInfo 转换成map
    Map<String, Object> orderInfoToMap(OrderInfo orderInfo);

    // 拆分订单
    List<OrderInfo> orderSplit(long orderId, String wareSkuMap);
}
